package ExceptionTest;

import java.io.FileInputStream;
import java.io.IOException;

/*
关于try...catch中的finally子句:
    1.在finally子句中的代码是最后执行的，并且是一定会执行的，即使try语句中的代码出现了异常
    finally子句必须和try一起出现，不能单独编写
    2.finally语句通常在什么时候使用呢
        通常在finally语句块中完成资源的释放/关闭
        因为finally中的代码比较有保障
        即使try语句块中的代码出现异常，finally中代码也会正常执行
        即使try语句块中有return，finally语句块仍然会执行
        如果System.exit(0)退出jvm，finally语句块将不执行
 */
public class FinallyTest1 {
    public static void main(String[] args){
        FileInputStream file = null;
        try{
            file = new FileInputStream("C:\\Users\\申继旺\\IdeaProjects\\JavaStudy\\HTML\\color.html");
            //模拟异常情况
            String s = null;
            //程序在此次会发生空指针异常，所以下面的代码将不会执行
            s.toString();
           //file.close(); //所以需要将此处代码放到finally子句中
        }catch(Exception io){
            io.printStackTrace();
        }finally{
            //程序放在此处，一定会执行
            try{
                if(file != null){
                    System.out.println("你好");
                    file.close();
                }
            }catch(IOException i){
                i.printStackTrace();
            }
        }
    }
}
